/**
 * @Copyright ®2015 Sinosoft Co. Ltd. All rights reserved.<br/>
 * 项目名称 : 中科软支付平台
 * 创建日期 : 2017年1月2日
 * 修改历史 : 
 *     1. [2017年1月2日]创建文件 by liuyujia
 */
package com.sinosoft.sinopay.timer.task.web.util;

import java.util.Map;
import java.util.TreeMap;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.sinosoft.sinocloud.platform.common.exception.biz.BizDataErrException;
import com.sinosoft.sinocloud.platform.common.util.SecurityUtil;

/**  
 * 【回调信息签名类】
 * @author liuyujia
 * @date 2017年1月2日 下午4:36:54 
 * @version V1.0  
 */
public class TimerSignUtil {
//	protected final Logger logger = LogManager.getLogger(super.getClass());
	/** 分隔符 */
	private static final String signal ="|";
	/**
	 * 回调签名方法
	 * <p>对传入的数据进行哈希排序,然后通过signal连接符进行拼接后的字符串进行md5加密,返回加密签名信息</p>
	 * @param encryMsgs
	 * @param signKey
	 * @return
	 */
	public static String encryMD5(Map<String,String> encryMsgs,String signKey){
    	//校验信息完整性
        if(signKey==null || "".equals(signKey.trim()) || encryMsgs==null || encryMsgs.size()<1){
        	throw new BizDataErrException("签名信息不完整");
        }
    
        //首先对非空数据进行排序
        TreeMap<String,String> treeMap = new TreeMap<>();
        for (String tKey : encryMsgs.keySet()) {
            String tValue = encryMsgs.get(tKey);
            if(tValue!=null && !"".equals(tValue)){
                treeMap.put(tKey, encryMsgs.get(tKey));
            }
        }
        treeMap.put("key",signKey);
        //拼接字符串
        StringBuffer sb = new StringBuffer();
        for (String tKey : treeMap.keySet()) {
            sb.append(tKey);
            sb.append("=");
            sb.append(treeMap.get(tKey));
            sb.append(signal);
        }
        String tToEncryStr = sb.toString().substring(0, sb.length()-1);
        System.out.println("待签名字符串："+tToEncryStr);
        //签名
        String md5Check = SecurityUtil.Md5(tToEncryStr+signKey);
        return md5Check;
    }
}
